package com.tp2.log121.framework;

import java.util.ArrayList;

public class StrategieBunco implements IStrategie {
	
	private boolean verifierBunco(Jeu jeu, int indexIterateurDe) {
		boolean unBuncoPotentiel = false;
		De de1 = jeu.cd.getDe(indexIterateurDe - 1);
		De de2 = jeu.cd.getDe(indexIterateurDe);

		if (de1.compareTo(de2) == 0) {
			unBuncoPotentiel = true;
		}
		return unBuncoPotentiel;
	}

	@Override
	public ArrayList<Joueur> calculerLeVainqueur(Jeu jeu) {	
		return jeu.cj.getJoueursParScoreDecroissant();
	}

	@Override
	public int calculerScoreTour(Jeu jeu) {
		int scoreTour = 0;
		ArrayList<Integer> scoreDesRoulers = jeu.scoreDesRoulers;
		
		for (Integer scoreRouler : scoreDesRoulers) {
			scoreTour += scoreRouler.intValue();
		}		
		return scoreTour;
	}

	@Override
	public int calculerScoreRouler(Jeu jeu) {
		final int SCORE_BUNCO = 21;
		final int SCORE_DES_PAREILS_NON_BUNCO = 5;
		final int SCORE_DES_EGALE_NUMERO_TOUR = 1;

		int indexIterateurDe = jeu.iterateurDe.getProchain();
		boolean unBuncoPotentiel = true;
		int score = 0;

		while ((indexIterateurDe = jeu.iterateurDe.getProchain()) != -1
				&& unBuncoPotentiel) {
			unBuncoPotentiel = verifierBunco(jeu, indexIterateurDe);
		}
		jeu.iterateurDe.reinitialiserIterateur();

		if (unBuncoPotentiel) {
			if (jeu.cd.getDe(0).getValeur() == jeu.numeroTour) {
				score = SCORE_BUNCO;
			} else {
				score = SCORE_DES_PAREILS_NON_BUNCO;
			}
		} else {
			while ((indexIterateurDe = jeu.iterateurDe.getProchain()) != -1) {
				if (jeu.cd.getDe(indexIterateurDe).getValeur() == jeu.numeroTour) {
					score += SCORE_DES_EGALE_NUMERO_TOUR;
				}
			}
		}

		return score;
	}
}
